# gigachat-light-api-wrapper

## Оглавление
* [Установка](#установка)
* [Первые шаги](#первые-шаги)
* [Функции](#функции)
    * [Авторизация](#авторизация)
    * [Подсчет количества токенов](#подсчет-количества-токенов)
    * [Получить список моделей](#получить-список-моделей)
    * [Получение ответа от модели](#получение-ответа-от-модели)
    * [Создание эмбеддинга](#создание-эмбеддинга)
    * [Получить сгенерированное изображение](#получить-сгенерированное-изображение)
    * [Получить список моделей](#получить-список-моделей)

## Установка

`pip install gigachat-api-wrapper-light`



## Первые шаги

1. Авторизуйтесь в [личном кабинете](https://developers.sber.ru/studio/registration)
2. Создайте проект для GigaChat
3. Получите credentials
4. Создайте объект gigachat с вашими credentianls
        `gigachat = Gigachat(credentials=<YOUR_VALUE_HERE>)`

## Функции
### Авторизация
Авторизация полностью контролируется библиотекой. Достаточно передать авторизационные данные внутрь
### [Подсчет количества токенов](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-tokens-count)
#### Вход
```
@dataclass
class TokensCountRequestModel:
    model: str
    input: List[str]
```
#### Вызов
`gigachat.get_tokens_count(input_model=<YOUR_MODEL_HERE>)`

#### Выход
```
List[TokensCountResponseModel]

@dataclass
class TokensCountResponseModel():
    tokens: int
    characters: int
```

### [Получить список моделей](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/get-models)

#### Вход 
нет
#### Вызов
`gigachat.get_models()`

#### Выход
```
@dataclass
class ModelsResponseModel():

    @dataclass
    class Data():
        id: str
        object: str
        owned_by: str
    
    data: List[Data]
    object: str
```

### [Получение ответа от модели](https://developers.sber.ru/docs/ru/gigachat/api/reference/rest/post-chat)

#### Вход
```
@dataclass
class CompletionsRequestModel:
    model: str
    temperature: Optional[float] = None
    top_p: Optional[float] = None
    n: Optional[int] = 1
    stream: Optional[bool] = False
    max_tokens: Optional[int] = 1024
    repetion_penalty: Optional[float] = 1.0
    update_interval: Optional[int] = None



    @dataclass
    class Message():
        role: str | None
        content: str
        data_for_context: List
    
    @dataclass
    class FunctionCall():
        name: str
        parameters: dict

    @dataclass
    class Function():
        name:str
        descrtiption: Optional[str] = None
        parameters: dict

        @dataclass
        class ShotExample():
            request: str
            params: dict

        few_shot_example: Optional[List[ShotExample]] = None
        return_parameters: Optional[dict] = None
        
    messages: List[Message]
    function_call: Union[FunctionCall, str]
```
#### Вызов
`gigachat.get_completions(input_model=<YOUR_MODEL_HERE>)`

#### Выход
```
@dataclass
class CompletionResponseModel():

    @dataclass
    class Choice():

        @dataclass
        class Message():
            role:str
            content:str
            data_for_context: List

        message: Message
        index: int
        finish_reason: str
    
    @dataclass
    class Usage():
        prompt_tokens: int
        completion_tokens: int
        total_tokens: int
        system_tokens: int
    
    choices: List[Choice]
    created: int
    model: str
    usage: Usage
    object: str
```
